home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / dev / sun4.md / devTMR.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  4KB  |  126 lines

  1. /*
  2.  * devTMR.h --
  3.  *
  4.  *    Declarations of sun3/4 timer device.
  5.  *
  6.  * Copyright 1989 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  *
  15.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/dev/sun4.md/devTMR.h,v 9.1 90/09/11 12:41:32 rab Exp $ SPRITE (Berkeley)
  16.  */
  17.  
  18. #ifndef _devTMR
  19. #define _devTMR
  20.  
  21. /*
  22.  * Definitions of the Am9513 interval timer chip
  23.  *
  24.  * The Am9513 counter's 5 stages may be concatenated to form an 80 bit
  25.  * counter.  We read The contents of these five 16-bit counter registers 
  26.  * into their respective hold registers with the "save counters" instruction.
  27.  */
  28.  
  29. typedef struct DevTimerVal {
  30.   unsigned char cmd;
  31.   unsigned char datahi;
  32.   unsigned char datalo;
  33. } DevTimerVal;
  34.  
  35. typedef struct DevTimerTest {
  36.   unsigned int proc;
  37.   unsigned int inLine;
  38. } DevTimerTest;
  39.  
  40. #define IOC_DEV_TIMER    (3 << 16)
  41.  
  42. # define IOC_DEV_TIMER_CMDWR   (IOC_DEV_TIMER | 1)
  43. # define IOC_DEV_TIMER_CMDRD   (IOC_DEV_TIMER | 2)
  44. # define IOC_DEV_TIMER_DATAWR  (IOC_DEV_TIMER | 3)
  45. # define IOC_DEV_TIMER_DATARD  (IOC_DEV_TIMER | 4)
  46. # define IOC_DEV_TIMER_INIT    (IOC_DEV_TIMER | 5)
  47. # define IOC_DEV_TIMER_DEBUG   (IOC_DEV_TIMER | 6)
  48. # define IOC_DEV_TIMER_TEST    (IOC_DEV_TIMER | 7)
  49. # define IOC_DEV_TIMER_SET     (IOC_DEV_TIMER | 8)
  50.  
  51. # define DEV_TIMER_DISARM  0xdf    /* Disarm all counters */
  52. # define DEV_TIMER_RESET   0xFF    /* Master Reset */
  53. # define DEV_TIMER_SAVE    0xBF    /* Save all 5 counters into the hold registers */
  54. # define DEV_TIMER_LDDPTR  0x00    /* OR'D with register name */
  55. # define DEV_TIMER_LDALL   0x5F    /* Load all timers.  Clears state. */
  56. # define DEV_TIMER_ARM     0x3F    /* ARM all timers. */
  57.  
  58. /*
  59.  * Counter mode bit
  60.  */
  61.  
  62. # define DEV_TIMER_F1  0x1B      /* Count from input clock, no gating */
  63. # define DEV_TIMER_F2  0x1C      /* Count from input clock/16, no gating */
  64. # define DEV_TIMER_TC  0x00      /* Previous stage's output, no gating */
  65. # define DEV_TIMER_CNT 0x28      /* Wrap around up counter.  Outputs disabled */
  66. /*
  67.  * Select the register to write.  These are writen to the load
  68.  * data pointer register instruction.
  69.  */
  70.  
  71. # define DEV_TIMER_HOLDCYC 0x19    /* Read hold registers 1-5 */
  72. # define DEV_TIMER_ELEMCYC 0x01    /* Write all counter registers 1-5 */
  73. # define DEV_TIMER_MMODE   0x17    /* Write master mode register */
  74.  
  75. # define Dev_TimerReadRegInline(x) { \
  76.         register unsigned char *y; \
  77.         register volatile DevTimerChip *tmrp; \
  78.         tmrp = dev_TimerAddr; \
  79.         DISABLE_INTR(); \
  80.         DEV_TIMER_CMD_PORT;\
  81.         tmrp->d_reg = DEV_TIMER_SAVE; MACH_DELAY(0); \
  82.                 tmrp->d_reg = DEV_TIMER_LDDPTR|DEV_TIMER_HOLDCYC;\
  83.              DEV_TIMER_DATA_PORT; \
  84.          y = (unsigned char *) (x) + sizeof(unsigned)-1; \
  85.          *y = tmrp->d_reg; --y; \
  86.          *y = tmrp->d_reg; --y; \
  87.          *y = tmrp->d_reg; --y; \
  88.          *y = tmrp->d_reg;  \
  89.          ENABLE_INTR(); }
  90.  
  91.  
  92. typedef struct DevTimerChip {
  93.     unsigned char cmdPort;       /* write only register pointer */
  94.     unsigned char     :8;
  95.     unsigned char d_reg;         /* Data register */
  96.     unsigned char   :8;
  97. } DevTimerChip;
  98.  
  99. extern volatile DevTimerChip *dev_TimerAddr;
  100. /*
  101.  * Ready timer boards for a command write or status read
  102.  */
  103. # define DEV_TIMER_CMD_PORT  dev_TimerAddr->cmdPort=0
  104. /*
  105.  * Ready timer boards for a data read or write 
  106.  */
  107. # define DEV_TIMER_DATA_PORT    devTimerJunkVar=dev_TimerAddr->cmdPort
  108.  
  109. #ifdef KERNEL
  110. extern int devTimerJunkVar;    /* unused variable */
  111.  
  112. extern ClientData Dev_TimerProbe _ARGS_((DevConfigController *ctrlLocPtr));
  113. extern ReturnStatus Dev_TimerIOControl _ARGS_((Fs_Device *devicePtr,
  114.     Fs_IOCParam *ioctlPtr, Fs_IOReply *replyPtr));
  115. extern ReturnStatus Dev_TimerRead _ARGS_((Fs_Device *devicePtr,
  116.     Fs_IOParam *readPtr, Fs_IOReply *replyPtr));
  117. extern void Dev_TimerReadReg _ARGS_((register unsigned char *cntrs,
  118.     register int cnt));
  119. extern ReturnStatus Dev_TimerOpen _ARGS_((Fs_Device *devicePtr, int useFlags,
  120.     Fs_NotifyToken notifyToken, int *flagsPtr));
  121.  
  122. #endif
  123.  
  124. #endif /* _devTMR */
  125.  
  126.